from scapy.all import sniff
from scapy.all import rdpcap

def Callback(packet):
    print('src:%s----->dst:%s' % (packet[IP].src, packet[IP].dst))
    print('TTL:%s' % packet[IP].ttl)
    print(packet.show())  # 内置的show()函数打印数据包内容


def count_packets(pkt):
    global icmp_count
    if pkt.haslayer('ICMP'):
        icmp_count += 1

############################################
#抓包
pkt = sniff(iface='Realtek RTL8852AE WiFi 6 802.11ax PCIe Adapter', timeout=60, prn=count_packets)
# sniff(filter='src host 192.168.1.124 && dst port 80',count=4, prn=Callback)
print(pkt)

#分析数据
sum = len(pkt)
icmp_count = 0
icmp_percent = (icmp_count / sum) * 100
print("一分钟内抓取到的流量包的总数: %d\nICMP包的数量: %d; 占比：%.2f%%" % (sum, icmp_count, icmp_percent))



############################################
#保存数据
wrpcap=("d:\\test.pcap",pkt)
#将pkt命名为test.pcap，放在d盘下
show(pkt)
#可以使用show函数输出数据包的详细内容

############################################
#读取数据
pcaps = rdpacp("d:\\test.pcap")
print(len(pcaps))
for pkt in pcaps:
    print("源mac地址为：" + pkt[Ether].src)
    print("目的mac地址为：" + pkt[Ether].dst)
    print("源IP地址为：" + pkt[IP].src)
    print("目的IP地址为：" + pkt[IP].dst)


